package com.ethink.platform.controller.warehouse;

import com.ethink.framework.common.constant.CommonRespCode;
import com.ethink.framework.common.exception.BusinessException;
import com.ethink.platform.controller.order.info.ExportInfo;
import com.ethink.platform.controller.order.info.MateInventorySaleChannelChangeLogDetailImportInfo;
import com.ethink.platform.manager.ExportManager;
import com.ethink.platform.manager.MateInventoryOtherInLogManager;
import com.ethink.warehouse.api.info.MateInventoryOtherInLogDetailInfo;
import com.ethink.warehouse.api.info.MateInventoryOtherInLogModeInfo;
import com.ethink.warehouse.api.response.MateInventoryOtherInLogDetailResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import com.ethink.framework.common.web.BaseController;
import com.ethink.framework.common.web.response.CommonResponse;
import com.ethink.warehouse.api.MateInventoryOtherInLogFacade;
import com.ethink.warehouse.api.info.MateInventoryOtherInLogInfo;
import com.ethink.warehouse.api.request.MateInventoryOtherInLogAddRequest;
import com.ethink.warehouse.api.request.MateInventoryOtherInLogQueryRequest;
import com.ethink.warehouse.api.request.MateInventoryOtherInLogUpdateRequest;
import org.springframework.web.multipart.MultipartFile;

/**
 * 其他入库 Controller
 *
 * @author default
 * @date 2023-02-09
 */
@Tag(name = "MateInventoryOtherInLogController", description = "其他入库 Controller")
@RestController
@Slf4j
@RequestMapping("platform-server/v1/warehouse-service")
public class MateInventoryOtherInLogController extends BaseController {

    @Autowired
    private MateInventoryOtherInLogFacade mateInventoryOtherInLogFacade;

    @Autowired
    private MateInventoryOtherInLogManager mateInventoryOtherInLogManager;

    @Autowired
    private ExportManager exportManager;

    @Operation(summary = "分页查询")
    @GetMapping("/mateInventoryOtherInLog/query")
    public CommonResponse<List<MateInventoryOtherInLogInfo>> queryMateInventoryOtherInLog(MateInventoryOtherInLogQueryRequest request) {
        return succeedWithPage(mateInventoryOtherInLogFacade.queryMateInventoryOtherInLog(request));
    }

    @Operation(summary = "导出")
    @GetMapping("/mateInventoryOtherInLog/export")
    public CommonResponse<ExportInfo> exportMateInventoryOtherInLogExcel(MateInventoryOtherInLogQueryRequest request) {
        return succeedWith(exportManager.exportMateInventoryOtherInLogExcel(request));
    }

    @Operation(summary = "货品模式分页查询")
    @GetMapping("/mateInventoryOtherInLog/queryMode")
    public CommonResponse<List<MateInventoryOtherInLogModeInfo>> queryMateInventoryOtherInLogMode(MateInventoryOtherInLogQueryRequest request) {
        return succeedWithPage(mateInventoryOtherInLogFacade.queryMateInventoryOtherInLogMode(request));
    }

    @Operation(summary = "货品模式导出")
    @GetMapping("/mateInventoryOtherInLog/exportMode")
    public CommonResponse<ExportInfo> exportMateInventoryOtherInLogModeExcel(MateInventoryOtherInLogQueryRequest request) {
        return succeedWith(exportManager.exportMateInventoryOtherInLogModeExcel(request));
    }

    @Operation(summary = "详情查询")
    @GetMapping("/mateInventoryOtherInLog/get/{mateInventoryOtherInLogId}")
    public CommonResponse<MateInventoryOtherInLogDetailResponse> getMateInventoryOtherInLogById(@PathVariable("mateInventoryOtherInLogId") Long mateInventoryOtherInLogId) {
        return succeedWith(mateInventoryOtherInLogFacade.getMateInventoryOtherInLogById(mateInventoryOtherInLogId));
    }

    @Operation(summary = "查询所有")
    @GetMapping("/mateInventoryOtherInLog/list")
    public CommonResponse<List<MateInventoryOtherInLogInfo>> listMateInventoryOtherInLog(MateInventoryOtherInLogQueryRequest request) {
        return succeedWith(mateInventoryOtherInLogFacade.listMateInventoryOtherInLog(request));
    }

    @Operation(summary = "新增")
    @PostMapping("/mateInventoryOtherInLog/add")
    public CommonResponse addMateInventoryOtherInLog(@RequestBody MateInventoryOtherInLogAddRequest request) {
        mateInventoryOtherInLogFacade.addMateInventoryOtherInLog(request);
        return succeed();
    }

    @Operation(summary = "更新")
    @PutMapping("/mateInventoryOtherInLog/update")
    public CommonResponse updateMateInventoryOtherInLog(@RequestBody MateInventoryOtherInLogUpdateRequest request) {
        mateInventoryOtherInLogFacade.updateMateInventoryOtherInLog(request);
        return succeed();
    }

    @Operation(summary = "删除")
    @PutMapping("/mateInventoryOtherInLog/delete/{mateInventoryOtherInLogId}")
    public CommonResponse deleteMateInventoryOtherInLog(@PathVariable("mateInventoryOtherInLogId") Long mateInventoryOtherInLogId) {
        mateInventoryOtherInLogFacade.deleteMateInventoryOtherInLog(mateInventoryOtherInLogId);
        return succeed();
    }

    @Operation(summary = "审批通过(订单状态 = 2)")
    @PutMapping("/mateInventoryOtherInLog/pass/{mateInventoryOtherInLogId}")
    public CommonResponse mateInventoryOtherInLogPass(@PathVariable Long mateInventoryOtherInLogId) {
        mateInventoryOtherInLogFacade.mateInventoryOtherInLogPass(mateInventoryOtherInLogId);
        return succeed();
    }

    @Operation(summary = "审批拒绝(订单状态 = 2)")
    @PutMapping("mateInventoryOtherInLog/refuse/{mateInventoryOtherInLogId}")
    public CommonResponse mateInventoryOtherInLogRefuse(@PathVariable Long mateInventoryOtherInLogId) {
        mateInventoryOtherInLogFacade.mateInventoryOtherInLogRefuse(mateInventoryOtherInLogId);
        return succeed();
    }

    @Operation(summary = "明细导入")
    @PostMapping("/mateInventoryOtherInLog/detailImport")
    public CommonResponse<List<MateInventoryOtherInLogDetailInfo>> importMateInventoryOtherInLogDetail(@RequestParam("file") MultipartFile file) {
        return succeedWith(mateInventoryOtherInLogManager.importMateInventoryOtherInLogDetail(file));
    }

}